"""
寻找宿舍门的密码:
今天早上，你的室友因为睡过头被锁在了宿舍里。
宿舍的门安装了一把高级密码锁。
当尝试解锁时，锁会生成一串包含随机英文字母和数字的字符串。为了解锁，你需要从这串字符串中找出所有的数字，按大小排序后组合成一个整数。
此外，你还需要获取所有室友当前位置的经纬度，并将经纬度的小数部分相加。
然后，你需要将这个整数与经纬度小数部分的和相乘，取结果的前8位数字作为解锁密码。

先编写一个 gen_txt 函数，它会生成一个包含100位随机英文数字字符的字符串，其中包含10位数字。
然后请编写一个名为 unlock_door 的函数，它接受上面生成的随机字符串和一个包含室友经纬度的列表，并返回一个字符串作为解锁密码。

例如：
random_string = gen_txt()
locations = [(120.12345, 30.04321), (121.03456, 31.95678), (122.04567, 32.06789)]   # 3个舍友的经度，纬度
password = unlock_door(random_string, locations)
print(password)
"""
import random
import string


def gen_txt():
    all_chars = string.ascii_letters + string.digits
    random_string = ''
    num_count = 0
    while len(random_string) < 100:
        char = random.choice(all_chars)
        random_string += char
        if char.isdigit():
            num_count += 1
        if num_count == 10:
            # 确保有且仅有 10 个数字
            remaining_length = 100 - len(random_string)
            random_string += ''.join(random.choices(string.ascii_letters, k=remaining_length))
    return random_string


def unlock_door(random_string, locations):
    # 从字符串中找出所有数字
    all_numbers = [int(char) for char in random_string if char.isdigit()]
    all_numbers.sort()
    num_str = ''.join(str(num) for num in all_numbers)
    integer_num = int(num_str)
    # 计算经纬度的小数部分的和
    decimal_sum = 0
    for lon, lat in locations:
        decimal_sum += (lon - int(lon)) + (lat - int(lat))
    result = integer_num * decimal_sum
    password = str(result)[:8]
    return password